package com.atwisdom.star.service.production;

import com.alibaba.fastjson.JSONObject;
import com.atwisdom.star.common.vo.ActionData;
import com.atwisdom.star.common.vo.ResultInfo;
import com.atwisdom.star.exception.pojo.BusinessException;

public interface MasterPlanService {
    /**
     * 新增生产计划
     * @param data 计划数据
     * @return 计划数据
     * @throws BusinessException
     */
    ResultInfo<?> addProductionPlan(JSONObject data) throws BusinessException;

    /**
     * 查询计划数据，并将hier下的数据对应的values查询出来放入
     * @param data 计划数据
     * @return 处理后的计划数据
     * @throws BusinessException
     */
    ResultInfo<?> queryProductionPlanAndHier(JSONObject data) throws BusinessException;
    /**
     * 订单分页查询，过滤掉被占用的数据
     * @param actionData 分页查询参数
     * @return 分页数据
     * @throws BusinessException
     */
    ResultInfo<?> querySalesOrderNotLinkByPage(JSONObject actionData)  throws BusinessException;
    /**
     * 计划绑定订单，并更新订单状态
     * @param actionData 参数
     * @return 绑定数据
     * @throws BusinessException
     */
    ResultInfo<?> addSalesOrderLinkToProductionPlan(ActionData<JSONObject> actionData) throws BusinessException;
    /**
     * 计划解除绑定订单，并更新订单状态
     * @param actionData 参数
     * @return 解绑是否成功标识
     * @throws BusinessException
     */
    ResultInfo<?> deleteSalesOrderLinkToProductionPlan(JSONObject actionData) throws BusinessException;
    /**
     * 更新计划状态
     * @param data 计划数据
     * @return 更新后数据
     * @throws BusinessException
     */
    ResultInfo<?> updateProductionPlanStatus(JSONObject data) throws BusinessException;
    /**
     * 审批计划
     * data示例：{"pointer":{"className":"","type":"","id":""},"approveValues":{"operatorId":"","operatorName":"","operateTime":"","action":"","status":"","opinions":""}}
     * @param data
     * @return
     * @throws BusinessException
     */
    ResultInfo<?> approveProductionPlan(JSONObject data)  throws BusinessException;

    /**
     * 更新需求订单数据
     * @param data 需求订单数据
     * @return 更新后数据
     * @throws BusinessException
     */
    ResultInfo<?> updateRequireSalesOrder(JSONObject data) throws BusinessException;
    /**
     * 新增子计划
     * @param data 计划数据
     * @return 计划数据
     * @throws BusinessException
     */
    ResultInfo<?> addRouting(JSONObject data)  throws BusinessException;
    /**
     * 处理工艺路径的workCenter
     * @param data 计划数据
     * @return 计划数据
     * @throws BusinessException
     */
    ResultInfo<?> dealRoutingWorkCenter(JSONObject data)  throws BusinessException;
    /**
     * 初始化工艺路径
     * @param data 计划数据
     * @return 计划数据
     * @throws BusinessException
     */
    ResultInfo<?> initRouting(JSONObject data)  throws BusinessException;
    /**
     * 根据工艺路径ID获取工作中心
     * @param data 工艺路径ID
     * @return 工作中心实例列表
     * @throws BusinessException
     */
    ResultInfo<?> getWorkCenterByRoutingId(JSONObject data) throws BusinessException;

    /**
     * 计划分页查询
     * @param actionData 分页查询参数
     * @return 返回分页查询routing数据
     * @throws BusinessException
     */
    ResultInfo<?> planQueryByPage(ActionData<JSONObject> actionData);

    /**
     * 删除计划
     * @param data 计划id和工艺路径id
     * @return 返回
     * @throws BusinessException
     */
    ResultInfo<?> deletePlan(JSONObject data) throws BusinessException;


    /**
     * 执行计划
     * @param data 计划数据
     * @return 更新状态后的计划数据
     * @throws BusinessException
     */
    ResultInfo<?> executePlan(JSONObject data) throws BusinessException;
    /**
     * 添加生产通知单
     * @param data 生产通知单数据
     * @return 生产通知单数据
     * @throws BusinessException
     */
    ResultInfo<?> addWorkNotice(JSONObject data) throws BusinessException;
    /**
     * 执行下发生产通知单
     * @param data 生产通知单数据
     * @return 生产通知单数据
     * @throws BusinessException
     */
    ResultInfo<?> executeWorkNotice(JSONObject data) throws BusinessException;
    /**
     * 工单开工
     * @param data 工单数据
     * @return 工单数据
     * @throws BusinessException
     */
    ResultInfo<?> startWorkNotice(JSONObject data) throws BusinessException;
    /**
     * 工单完工
     * @param data 工单数据
     * @return 工单数据
     * @throws BusinessException
     */
    ResultInfo<?> endWorkNotice(JSONObject data) throws BusinessException;

    /**
     * 分页查询，过滤掉被占用的数据
     * @param actionData 分页查询参数
     * @return 分页数据
     * @throws BusinessException
     */
    ResultInfo<?> queryTankNotLinkByPage(JSONObject actionData)  throws BusinessException;

    /**
     * 增加领退料记录
     * @param data 领退料记录
     * @return 领退料记录数据
     * @throws BusinessException
     */
    ResultInfo<?> addMaterialRecord(JSONObject data) throws BusinessException;
    /**
     * 增加报工记录
     * @param data 报工记录
     * @return 报工记录数据
     * @throws BusinessException
     */
    ResultInfo<?> addWorkReportRecord(JSONObject data) throws BusinessException;
    /**
     * 提交报工记录
     * @param data 报工记录
     * @return 报工记录数据
     * @throws BusinessException
     */
    ResultInfo<?> submitWorkReportRecord(JSONObject data) throws BusinessException;
    /**
     * 删除报工记录
     * @param data 报工记录
     * @return 报工记录数据
     * @throws BusinessException
     */
    ResultInfo<?> deleteWorkReportRecord(JSONObject data) throws BusinessException;
}
